perm filename PTCH2[AI,JMC] blob sn#005452 filedate 1971-08-13 generic text, type T, neo UTF8
00050	TITLE PUTCH
00100	PUTCH:	SKIPN OLD,POSTB(DEST)
00101		MOVE OLD,OFBTB(MOVER)
00102		MOVEM OLD,@PCTB(MOVER)
00104		SKIPGE OLD,LOC(MOVER)
00110		JRST L11A
00111		SETZM DEF(MOVER)
00112		SETZM ATT(MOVER)
00113		MOVE K,KIND(MOVER)
00120		MOVNI T2,1
00130		SKIPL I,LM(MOVER)
00140		JRST L11P
00150		HLRE M,I
00155		JRST PL4
00160	L11P:	TLC I,-1
00170		SKIPGE T1,MOVE(I)
00180		JRST L11PA
00190		MOVEM T2,MOVE(I)
00200		MOVEM T2,JBEAR(T1)
00201		CAIN K,PAWN
00202		TRNN I,2
00203		SKIPA
00204		JRST L11PA
00205		ANDI T1,77
00206		SKIPGE T1,OCC(T1)
00207		JRST L11PA
00208		MOVE B,MOVER
00209		XOR B,T1
00210		TRNE B,20
00211		SOSA ATT(T1)
00212		SOS DEF(T1)
00213	L11PA:	AOBJN I,L11P+1
00215		JRST L11A
00220	PL2:	ADDI I,10
00230		ANDI I,-10
00240	PL4:	SKIPGE T1,MOVE(I)
00250		JRST PL3
00260	PL1:	MOVEM T2,JBEAR(T1)
00270		MOVEM T2,MOVE(I)
00271		CAIN K,KING
00272		TRNN I,7
00273		SKIPA
00274		JRST PL3F
00275		ANDI T1,77
00276		SKIPGE T1,OCC(T1)
00277		JRST PL3F
00278		MOVE B,MOVER
00279		XOR B,T1
00280		TRNE B,20
00281		SOSA ATT(T1)
00282		SOS DEF(T1)
00283	PL3F:	SKIPL T1,MOVE+1(I)
00290		AOJA I,PL1
00300	PL3:	AOJL M,PL2
00900	L11A:	MOVEM DEST,LOC(MOVER)
01000		SETOM OCC(OLD)
01100		SKIPL DEST
01200		MOVEM MOVER,OCC(DEST)
01300		JUMPGE OLD,L21
01400		MOVE T1,KIND(MOVER)
01500		MOVE T1,VALUE(T1)
01600		CAIGE MOVER,20
01700		ADDM T1,WCOUNT#
01800		CAIL MOVER,20
01900		ADDM T1,BCOUNT#
02000		JRST P1
02100	L21:	MOVEI MDIR,0
02200		HRLZI DIR,-10
02300		MOVE IBEAR,OLD
02400	L24:	SKIPGE B,JBEAR(IBEAR)
02500		JRST PD1
02600		MOVE K,KIND(B)
02700		CAIN K,PAWN
02800		JRST PD2
02900		SKIPGE N,NEXT(IBEAR)
03000		JRST PD1
03100		MOVE T1,LOC(B)
03200		LDB M,DISTBL(OLD)
03300		ADD M,EIGHTX(DIR)
03400		ADD M,LM(B)
04500	PD3:	MOVEI T1,@N
04700		MOVEM B,JBEAR(T1)
05000		HRRZM T1,MOVE(M)
05100		CAIE K,KING
05200		JRST L25
     

00100		MOVE T2,OPP(DIR)
00200		MOVE I,N
00300		CAIL B,20
00400		IORI I,100
00500		MOVEM T2,KDIR(I)
00600	L25:	SKIPL T2,OCC(N)
00700		JRST PD4
00800		SKIPGE N,NEXT(T1)
00900		JRST PD1
01000		AOJA M,PD3
01100	PD2:	MOVE T1,RANK(OLD)
01200		CAIGE B,20
01300		JRST L31
01400		CAIN T1,5
01450		CAIE MDIR,300
01500		JRST PD1
01600		JRST L32
01610	PD4:	CAIN K,KING
01620		JRST PD1
01630		XOR B,T2
01640		TRNN B,20
01650		AOSA DEF(T2)
01660		AOS ATT(T2)
01670		JRST PD1
01700	L31:	CAIN T1,2
01750		CAIE MDIR,100
01800		JRST PD1
01900	L32:	MOVE T1,IBEAR
02000		CAIGE B,20
02100		ADDI T1,10
02200		CAIL B,20
02300		SUBI T1,10
02400		MOVEM B,JBEAR(T1)
02500		MOVE T2,LM(B)
02700		HRRZM T1,MOVE+3(T2)
02800	PD1:	ADDI MDIR,100
02900		ADDI IBEAR,100
03000		AOBJN DIR,L24
03100		JUMPGE DEST,P1
03200		MOVE T1,KIND(MOVER)
03300		MOVN T1,VALUE(T1)
03400		CAIGE MOVER,20
03500		ADDM T1,WCOUNT
03600		CAIL MOVER,20
03700		ADDM T1,BCOUNT
04000		POPJ P,
04100	P1:	MOVEI MDIR,0
04200		HRLZI DIR,-10
04300		MOVE IBEAR,DEST
04400	L44:	SKIPGE B,JBEAR(IBEAR)
04500		JRST PE1
04600		MOVE K,KIND(B)
04700		CAIN K,PAWN
04800		JRST PE2
04900		SKIPGE N,NEXT(IBEAR)
05000		JRST PE1
     

00100		MOVE T1,LOC(B)
00200		LDB M,DISTBL(DEST)
00300		ADD M,EIGHTX(DIR)
00400		ADD M,LM(B)
01500	PE3:	MOVEI T1,@N
01700		SETOM JBEAR(T1)
01800		SETOM MOVE(M)
01900		CAIE K,KING
02000		JRST L45
02100		MOVE T2,N
02200		CAIL B,20
02300		IORI T2,100
02400		SETOM KDIR(T2)
02500	L45:	SKIPL T2,OCC(N)
02600		JRST PE4
02700		SKIPGE N,NEXT(T1)
02750		JRST PE1
02800		AOJA M,PE3
02900	PE2:	MOVE T1,RANK(DEST)
03000		CAIGE B,20
03100		JRST L51
03200		CAIN T1,5
03250		CAIE MDIR,300
03300		JRST PE1
03400		JRST L52
03410	PE4:	CAIN K,KING
03420		JRST PE1
03430		XOR B,T2
03440		TRNN B,20
03450		SOSA DEF(T2)
03460		SOS ATT(T2)
03470		JRST PE1
03500	L51:	CAIN T1,2
03550		CAIE MDIR,100
03600		JRST PE1
03700	L52:	MOVE T1,IBEAR
03800		CAIGE B,20
03900		ADDI T1,10
04000		CAIL B,20
04100		SUBI T1,10
04200		SETOM JBEAR(T1)
04300		MOVE T2,LM(B)
04500		SETOM MOVE+3(T2)
04600	PE1:	ADDI MDIR,100
04700		ADDI IBEAR,100
04800		AOBJN DIR,L44
     

00100		MOVE K,KIND(MOVER)
00200		XCT TB1(K)
00400	PFRB5:	HRRZ MDIR,DIR
00500		LSH MDIR,6
00600	PFRB4:	HRRZ M,DIR
00700		LSH M,3
00800		ADD M,LM(MOVER)
00900		MOVE N,DEST
00950		HRLI N,MDIR
01000		MOVE T1,MDIR
01100		IOR T1,N
01200	PFRB3:	SKIPGE N,NEXT(T1)
01300		JRST PF1
01375		MOVEI T1,@N
01400		MOVEM MOVER,JBEAR(T1)
01500		HRRZM T1,MOVE(M)
01600		CAIE K,KING
01700		JRST PFRB2
01800		MOVE I,N
01900		CAIL MOVER,20
02000		IORI I,100
02100		MOVE T2,OPP(DIR)
02200		MOVEM T2,KDIR(I)
02300	PFRB2:	SKIPGE T2,OCC(N)
02400		AOJA M,PFRB3
02410		CAIN K,KING
02420		TRNN M,7
02430		SKIPA
02440		JRST PF1
02450		MOVE IBEAR,MOVER
02460		XOR IBEAR,T2
02470		TRNN IBEAR,20
02480		AOSA DEF(T2)
02490		AOS ATT(T2)
02500	PF1:	ADDI MDIR,100
02600		AOBJN DIR,PFRB4
02700		JRST UPAT
02800	TB1:	JRST PFP
02900		HRLZI DIR,-4
03000		JRST PFN
03100		MOVE DIR,[XWD -4,4]
03200		HRLZI DIR,-10
03300		JRST KSET
03310	KSET:	CAIGE MOVER,20
03320		JRST KS1
03330		MOVE DIR,[XWD KDIR+100,KDIR+101]
03340		SETOM KDIR+100
03350		BLT DIR,KDIR+177
03360		HRLZI DIR,-10
03370		JRST PFRB5
03380	KS1:	MOVE DIR,[XWD KDIR,KDIR+1]
03382		SETOM KDIR
03384		BLT DIR,KDIR+77
03386		HRLZI DIR,-10
03388		JRST PFRB5
03400	PFN:	MOVE DIR,[XWD -10,10]
03500		MOVE MDIR,DEST
03600		IORI MDIR,1000
03700	PFN2:	SKIPGE N,NEXT(MDIR)
03800		JRST PFN1
03900		MOVE T1,DIR
04000		LSH T1,6
04100		IOR T1,N
04200		MOVEM MOVER,JBEAR(T1)
04300		MOVEI T2,-10(DIR)
04400		ADD T2,LM(MOVER)
04500		HRRZM T1,MOVE(T2)
04510		SKIPGE T2,OCC(N)
04520		JRST PFN1
04530		MOVE T1,MOVER
04540		XOR T1,T2
04550		TRNN T1,20
04560		AOSA DEF(T2)
04570		AOS ATT(T2)
04600	PFN1:	ADDI MDIR,100
04700		AOBJN DIR,PFN2
04800		JRST UPAT
     

00100	PFP:	MOVE M,LM(MOVER)
00200		CAIL MOVER,20
00300		JRST BLACKP
00400		MOVEI DIR,400
00500		IOR DIR,DEST
00600		SKIPGE N,NEXT(DIR)
00700		JRST PF3
00710		SKIPGE T1,OCC(N)
00720		JRST PF31
00730		CAIGE T1,20
00740		AOSA DEF(T1)
00750		AOS ATT(T1)
00800	PF31:	IORI N,400
00900		MOVEM MOVER,JBEAR(N)
01000		HRRZM N,MOVE(M)
01100	PF3:	SKIPGE N,NEXT+100(DIR)
01200		JRST PF3P
01210		SKIPGE T1,OCC(N)
01220		JRST PF32
01230		CAIGE T1,20
01240		AOSA DEF(T1)
01250		AOS ATT(T1)
01300	PF32:	IORI N,500
01400		MOVEM MOVER,JBEAR(N)
01500		HRRZM N,MOVE+1(M)
01600	PF3P:	MOVE IBEAR,DEST
01700		ADDI IBEAR,110
01800		MOVEM MOVER,JBEAR(IBEAR)
01900		HRRZM IBEAR,MOVE+2(M)
02000		MOVE T1,RANK(DEST)
02100		CAIN T1,1
02200		SKIPL OCC+10(DEST)
02300		JRST UPAT
02400		ADDI IBEAR,10
02500		MOVEM MOVER,JBEAR(IBEAR)
02600		HRRZM IBEAR,MOVE+3(M)
02700		JRST UPAT
02800	BLACKP:	MOVEI DIR,600
02900		IOR DIR,DEST
03000		SKIPGE N,NEXT(DIR)
03100		JRST PF4
03110		SKIPGE T1,OCC(N)
03120		JRST PF41
03130		CAIGE T1,20
03140		AOSA ATT(T1)
03150		AOS DEF(T1)
03200	PF41:	IORI N,600
03300		MOVEM MOVER,JBEAR(N)
03400		HRRZM N,MOVE(M)
03500	PF4:	SKIPGE N,NEXT+100(DIR)
03600		JRST PF4P
03610		SKIPGE T1,OCC(N)
03620		JRST PF42
03630		CAIGE T1,20
03640		AOSA ATT(T1)
03650		AOS DEF(T1)
03700	PF42:	IORI N,700
03800		MOVEM MOVER,JBEAR(N)
03900		HRRZM N,MOVE+1(M)
04000	PF4P:	MOVE IBEAR,DEST
04100		ADDI IBEAR,270
04200		MOVEM MOVER,JBEAR(IBEAR)
04300		HRRZM IBEAR,MOVE+2(M)
04400		MOVE T1,RANK(DEST)
04500		CAIN T1,6
04600		SKIPL OCC-10(DEST)
04700		JRST UPAT
04800		SUBI IBEAR,10
04900		MOVEM MOVER,JBEAR(IBEAR)
05000		HRRZM IBEAR,MOVE+3(M)
05100		JRST UPAT
     

00100	NXTSET:	MOVEI I,0
00150		HRLZI N,-20
00200	NXS3:	HLRE T1,TBST(N)
00250		HRRE T2,TBST(N)
00300		HRLZI K,-10
00350	NXS2:	HRLZI B,-10
00400	NXS1:	HRRZ 0,B
00450		ADD 0,T2
00500		JUMPL 0,NG
00550		CAILE 0,7
00600		JRST NG
00650		HRRZ DIR,K
00700		ADD DIR,T1
00750		JUMPL DIR,NG
00800		CAILE DIR,7
00850		JRST NG
00900		LSH DIR,3
00950		IOR DIR
01000		HRLI MDIR
01050		MOVEM 0,NEXT(I)
01100	NXS4:	ADDI I,1
01150		AOBJN B,NXS1
01200		AOBJN K,NXS2
01250		AOBJN N,NXS3
01300		POPJ P,
01350	NG:	SETOM NEXT(I)
01400		JRST NXS4
01450	TBST:	BYTE (18) 0,-1,1,0,0,1,-1,0,1,-1,1,1,-1,1,-1,-1
01500		BYTE (18) 2,-1,2,1,1,2,-1,2,-2,1,-2,-1,-1,-2,1,-2
01550	NEXT:	BLOCK 2000
01560	DEF:	BLOCK 40
01570	ATT:	BLOCK 40
01600	LOC:	BLOCK 41
01650	OCC:	BLOCK 100
01700	JBEAR:	BLOCK 2000
01750	KDIR:	BLOCK 200
01800	MOVE:	BLOCK 4000
01850	KIND:	REPEAT 2,<EXP 1,2,3,4,5,3,2,1
01900		REPEAT 10,<Z>>
01950	VALUE:	EXP 1,5,3,3,11,1000
02000	RANK:	FOO=0
02050		REPEAT 10,<REPEAT 10,<EXP FOO>
02100		FOO=FOO+1>
02150	FILE:	REPEAT 10,<EXP 0,1,2,3,4,5,6,7>
02200	OPP:	EXP 2,3,0,1,6,7,4,5,14,15,16,17,10,11,12,13
02250	LM:	FOO=0
02260		REPEAT 2,<XWD -10,FOO
02262		FOO=FOO+100
02264		XWD 7,FOO
02266		FOO=FOO+100
02268		REPEAT 4,<XWD -10,FOO
02270		FOO=FOO+100>
02272		XWD 7,FOO
02274		FOO=FOO+100
02276		XWD -10,FOO
02278		FOO=FOO+100
02280		REPEAT 10,<XWD 3,FOO
02290		FOO=FOO+100>
02300	>
     

00100	P=17
00200	MOVER=16
00300	DEST=15
00400	I=14
00500	OLD=13
00600	MDIR=12
00700	DIR=11
00800	IBEAR=10
00900	B=7
01000	K=6
01100	M=5
01200	N=4
01300	T2=3
01400	T1=2
01500	PAWN=0
01600	ROOK=1
01700	KNIGHT=2
01800	BISHOP=3
01900	QUEEN=4
02000	KING=5
02100	EIGHTX:	EXP 0,10,20,30,40,50,60,70,100,110,120,130,140,150,160,170,200
02200	DISTBL:	FOO=0
02300		REPEAT 5,<X=2
02400		REPEAT 14,<POINT 3,BTB+FOO(T1),X
02500		X=X+3>
02600		FOO=FOO+100>
02700		X=2
02800		REPEAT 4,<POINT 3,BTB+500(T1),X
02900		X=X+3>
03000	BTB:	BLOCK 600
03100	SETBTB:	MOVEI T1,77
03200		MOVEI T2,77
03300		MOVE 1,RANK(T1)
03400		CAMN 1,RANK(T2)
03500		JRST L22
03600		SUB 1,RANK(T2)
03700		JRST L23
03800	L22:	MOVE 1,FILE(T1)
03900		SUB 1,FILE(T2)
04000	L23:	MOVMS 1
04100		DPB 1,DISTBL(T2)
04200		SOJGE T2,SETBTB+2
04300		SOJGE T1,SETBTB+1
04400		POPJ P,
     

00100	UPAT:	HRLZI MDIR,-20
00200		HRR MDIR,DEST
00300	UP2:	SKIPGE T2,JBEAR(MDIR)
00400		JRST UP1
00500		MOVE K,KIND(T2)
00600		CAIN K,PAWN
00700		JRST PATK
00800		CAIN K,KING
00900		JRST KATK
01000	UPDT:	XOR T2,MOVER
01100		TRNE T2,20
01200		AOSA ATT(MOVER)
01300		AOS DEF(MOVER)
01400		JRST UP1
01500	PATK:	MOVE T1,LOC(T2)
01600		MOVE T1,FILE(T1)
01700		CAME T1,FILE(DEST)
01800		JRST UPDT
01900		JRST UP1
02000	KATK:	MOVE T1,LOC(T2)
02100		LDB M,DISTBL(DEST)
02200		CAIN M,1
02300		JRST UPDT
02400	UP1:	ADDI MDIR,77
02500		AOBJN MDIR,UP2
02600		POPJ P,